﻿define(['vue','axios','manager-box','teacher-box','jquery', 'bootstrap', 'backend', 'table', 'form'], function (Vue,Axios,ManagerBox,TeacherBox, $, undefined, Backend, Table, Form) {

    // 检查密码对话框函数是否存在，如果不存在则创建简单的替代实现
    if (typeof window.showSchedulePasswordDialog === 'undefined') {
        window.showSchedulePasswordDialog = function(callback) {
            var password = prompt('请输入排课密码：');
            if (password && typeof callback === 'function') {
                callback(password);
            }
        };
    }
    
    if (typeof window.showCancelPasswordDialog === 'undefined') {
        window.showCancelPasswordDialog = function(callback) {
            var password = prompt('请输入取消排课密码：');
            if (password && typeof callback === 'function') {
                callback(password);
            }
        };
    }

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'coursetable/autoplan/index?table_id='+Config.table_id+'&rel_type='+Config.relType,
                    add_url: 'coursetable/autoplan/add',
                    edit_url: 'coursetable/autoplan/edit',
                    multi_url: 'coursetable/autoplan/multi',
                    del_url: 'coursetable/autoplan/del',
                    table: 'fa_course_table_autoplan',
                    export_url: 'autoplan/export?XDEBUG_SESSION_START=54325',
                    import_url: 'coursetable/autoplan/import',
                }
            });

            var table = $("#table");

            // 全局变量存储所有数据
            window.allRecords = [];
            window.expiredRecords = [];
            window.normalRecords = [];
            window.currentView = 'normal';
            window.currentPage = {
                expired: 1,
                normal: 1
            };
            window.pageSize = 30;
            
            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                queryParams: function (params) {
                    params.rel_type = Config.relType;
                    params.rel_id = Config.relId;
                    // 添加项目ID参数
                    if (typeof window.selectedProjectId !== 'undefined' && window.selectedProjectId > 0) {
                        params.table_id = window.selectedProjectId;
                    }
                    // 禁用服务器端分页，一次性加载所有数据
                    
                    params.limit = 999999;
                    return params;
                },
                escape: false,
                pk: 'id',
                pageSize: 999999, // 设置很大的值以显示所有数据
                sortName: 'id',
                sortOrder: 'asc',
                search: true,
                searchFields: ['classes_id'],
                searchPlaceholder: '请输入班名',
                // 禁用服务器端分页
                sidePagination: 'client',
                pagination: false, // 完全禁用分页
                // 添加行样式格式化
                rowStyle: function(row, index) {
                    var style = {};
                    
                    // 检查是否过期
                    if (row.is_expired) {
                        // 过期事件：红色边框和灰色背景
                        style.css = {
                            'border-left': '4px solid #dc3545',
                            'background-color': '#f8f9fa',
                            'color': '#6c757d'
                        };
                        style.classes = 'expired-event';
                        return style;
                    }
                    
                    // 如果是正式排课，设置绿色文字
                    if (typeof Config.isFormalSchedule !== 'undefined' && Config.isFormalSchedule) {
                        style.css = {
                            'color': '#28a745',
                        };
                    }
                    
                    // 如果单条记录标记为正式排课，也设置绿色背景
                    if (row.is_formal) {
                        style.classes = 'success';
                    }
                    
                    return style;
                },
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id')},
                        {field: 'table_id', title: '项目名称',width: '240px'},
                        {field: 'classes_id', title: '班名'},
                        {field: 'ocation_id', title: '教室'},
                        {field: 'teacher_id', title: '老师'},
                        {field: 'apply_num', title: '报名人数'},
                        {field: 'real_num', title: '实到人数'},
                        {field: 'date', title: '日期'},
                        {field: 'week', title: '周几'},
                        {field: 'area_teaching_ocation_id', title: '社区'},
                        {
                            field: 'operate',
                            title: __('Operate'),
                            table: table,
                            events: Table.api.events.operate,
                            formatter: function (value, row, index) {
                                var buttons = [];
                                
                                // 检查是否过期
                                var isExpired = row.is_expired || false;
                                
                                // 编辑按钮
                                if (isExpired) {
                                    // 过期事件：可以点击查看，但标识为过期状态
                                    buttons.push('<a href="javascript:;" class="btn btn-xs btn-warning btn-editone btn-dialog expired-edit" data-area="[&quot;80%&quot;,&quot;80%&quot;]" data-title="查看自动排课（已过期）" data-url="coursetable/autoplan/edit?ids=' + row.id + '" title="查看详情（已过期，无法修改）"><i class="fa fa-eye"></i></a>');
                                } else {
                                    // 正常事件：正常编辑按钮
                                    buttons.push('<a href="javascript:;" class="btn btn-xs btn-success btn-editone btn-dialog" data-area="[&quot;80%&quot;,&quot;80%&quot;]" data-title="编辑自动排课" data-url="coursetable/autoplan/edit?ids=' + row.id + '" title="编辑"><i class="fa fa-pencil"></i></a>');
                                }
                                
                                // 删除按钮
                                if (isExpired) {
                                    // 过期事件：完全禁用删除按钮，不添加任何点击事件
                                    buttons.push('<span class="btn btn-xs btn-secondary btn-disabled" title="已过期，无法删除" style="opacity: 0.5; cursor: not-allowed; pointer-events: none;"><i class="fa fa-trash"></i></span>');
                                } else {
                                    // 正常事件：正常删除按钮
                                    buttons.push('<a href="javascript:;" class="btn btn-xs btn-danger btn-delone" data-url="coursetable/autoplan/del?ids=' + row.id + '" title="删除"><i class="fa fa-trash"></i></a>');
                                }
                                
                                return buttons.join(' ');
                            }
                        }
                    ]
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
            
            // 监听表格选择变化，控制批量操作按钮状态
            table.on('check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table', function () {
                var selections = table.bootstrapTable('getSelections');
                var hasExpiredEvent = false;
                
                // 检查选中的记录中是否有过期事件
                for (var i = 0; i < selections.length; i++) {
                    if (selections[i].is_expired) {
                        hasExpiredEvent = true;
                        break;
                    }
                }
                
                // 如果有过期事件，禁用编辑和删除按钮
                if (hasExpiredEvent && selections.length > 0) {
                    $('.btn-edit').addClass('disabled').attr('title', '选中的记录包含已过期事件，无法批量编辑');
                    $('.btn-del').addClass('disabled').attr('title', '选中的记录包含已过期事件，无法批量删除');
                } else if (selections.length > 0) {
                    $('.btn-edit').removeClass('disabled').attr('title', '编辑');
                    $('.btn-del').removeClass('disabled').attr('title', '删除');
                }
            });
            
            // 阻止过期事件删除按钮的点击事件
            $(document).on('click', '.btn-disabled', function(e) {
                e.preventDefault();
                e.stopPropagation();
                return false;
            });

            document.addEventListener('DOMContentLoaded', function() {
                const table = document.querySelector('table');
                const fixedRow = document.querySelector('tr.fixed-row'); // 确保选择器正确
                const originalRows = table.querySelectorAll('tr:not(.fixed-row)');
                const tableOffsetTop = table.offsetTop; // 获取表格距离顶部的距离
                const rowOffsetTop = fixedRow.offsetTop - tableOffsetTop; // 获取行相对于表格的距离
                if (originalRows.length > 0) {
                    const colCount = originalRows[0].cells.length;
                    const colWidths = Array.from(originalRows[0].cells).map(cell => cell.offsetWidth);
                    Array.from(fixedRow.cells).forEach((cell, index) => {
                        // 跳过ID、项目名称、班名列，不改变其宽度
                        if (index === 1 || index === 2 || index === 3) {
                            return; // 保持原有宽度
                        }
                        cell.style.width = `${colWidths[index]}px`;
                    });
                }
            });

            document.addEventListener('DOMContentLoaded', function() {
                const table = document.querySelector('table#table');
                const fixedRow = document.querySelector('#table thead tr'); // 确保选择器正确
                const originalRows = table.querySelectorAll('#table tbody tr');
                const tableOffsetTop = table.offsetTop; // 获取表格距离顶部的距离
                alert(tableOffsetTop);
                const rowOffsetTop = fixedRow.offsetTop - tableOffsetTop; // 获取行相对于表格的距离
                if (originalRows.length > 0) {
                    const colCount = originalRows[0].cells.length;
                    const colWidths = Array.from(originalRows[0].cells).map(cell => cell.offsetWidth);
                    Array.from(fixedRow.cells).forEach((cell, index) => {
                        // 跳过ID、项目名称、班名列，不改变其宽度
                        if (index === 1 || index === 2 || index === 3) {
                            return; // 保持原有宽度
                        }
                        cell.style.width = `${colWidths[index]}px`;
                    });
                }
            });


            $(document).on('fa.event.success', function(event, data) {
                if (data && data.message) {
                    Toastr.success(data.message);
                }
                setTimeout(function() {
                    location.reload();
                }, 1000);
            });
            $(document).on('click','.btn-redo', function(event, data) {
                // 检查是否已有正式排课记录
                Fast.api.ajax({
                    url: 'coursetable/autoplan/checkFormalSchedule',
                    data: {table_id: window.selectedProjectId || Config.table_id}
                }, function(data, ret) {
                    if (data.has_formal) {
                        Layer.alert('该项目已有正式排课记录，不能重排！请先取消正式排课后再进行重排操作。', {
                            icon: 2,
                            title: '警告'
                        });
                        return false; // 阻止继续执行
                    } else {
                        // 没有正式排课记录，可以继续重排
                        Layer.confirm('确定要清空该项目的排期数据吗？此操作不可恢复！', {
                            icon: 3,
                            title: '警告'
                        }, function(index) {
                            Fast.api.ajax({
                                url: 'coursetable/autoplan/clear',
                                data: {table_id: window.selectedProjectId}
                            }, function(data, ret) {
                                Toastr.success('清空成功');
                                table.bootstrapTable('refresh');
                                // 刷新排课表视图
                                if ($('#schedule-table').hasClass('active')) {
                                    loadScheduleView();
                                }
                                Layer.close(index);
                            }, function(data, ret) {
                                // 添加错误处理
                                Toastr.error('清空失败: ' + (ret && ret.msg ? ret.msg : '未知错误'));
                                Layer.close(index);
                            });
                        });
                    }
                }, function(data, ret) {
                    Toastr.error('检查正式排课记录失败: ' + (ret && ret.msg ? ret.msg : '未知错误'));
                });
            });

            // 在table.on('load-success.bs.table', function (e, data) {部分修改
            table.on('load-success.bs.table', function (e, data) {
                // 缓存排课表数据
                $('#message').html(data.message);
                
                // 检查返回JSON格式和数据结构
                if (data.rows && data.rows.length > 0) {
                    console.log('8. 第一条记录字段:', Object.keys(data.rows[0]));
                } else {
                }
                
                // 检查表格当前状态
                console.log('9. 表格当前行数:', $('#table tbody tr').length);
                console.log('10. 表格容器存在:', $('#table').length > 0);
                
                // 检查Bootstrap Table的内部状态
                var tableOptions = table.bootstrapTable('getOptions');
                // 检查表格内部数据
                var tableData = table.bootstrapTable('getData');
                // 尝试手动设置数据
                if (data.rows && data.rows.length > 0) {
                    // 手动设置数据到Bootstrap Table
                    table.bootstrapTable('load', data.rows);
                    
                    // 检查设置后的状态
                    setTimeout(function() {
                        var newTableData = table.bootstrapTable('getData');
                        console.log('15. 手动设置后表格行数:', $('#table tbody tr').length);
                        
                        // 如果还是不行，尝试完全重新初始化
                        if (newTableData.length === 0) {
                            table.bootstrapTable('destroy');
                            
                            // 重新初始化表格
                            table.bootstrapTable({
                                data: data.rows,
                                pageSize: 999999,
                                sidePagination: 'client',
                                pagination: false,
                                escape: false,
                                pk: 'id',
                                sortName: 'id',
                                search: true,
                                searchFields: ['classes_id'],
                                searchPlaceholder: '请输入班名'
                            });
                            
                            setTimeout(function() {
                                console.log('17. 重新初始化后表格行数:', $('#table tbody tr').length);
                            }, 200);
                        }
                    }, 100);
                }
                

                // 绑定导出按钮点击事件
                $(document).on("click",".btn-export", function () {
                    var selectedRows = table.bootstrapTable('getSelections');
                    var ids = [];
                    for (var i = 0; i < selectedRows.length; i++) {
                        ids.push(selectedRows[i].id);
                    }
                    var exportUrl = $.fn.bootstrapTable.defaults.extend.export_url;
                    if (ids.length > 0) {
                        var idParams = ids.join(',');
                        if (exportUrl.indexOf('?') === -1) {
                            exportUrl += '?ids=' + idParams;
                        } else {
                            exportUrl += '&ids=' + idParams;
                        }
                    }
                    const a = document.createElement('a');
                    a.href = exportUrl;
                    document.body.appendChild(a);
                    a.click();
                    document.body.removeChild(a);
                });
                if($("#message").length > 0){
                    $("#message").html(data.message);
                }
                // 修改为新的分组处理功能 - 确保表格完全渲染后再分组
                setTimeout(function() {
                    // 检查表格是否有数据行
                    if ($('#table tbody tr').length > 0) {
                        handleEventGrouping();
                    } else {
                        // 如果还没有数据行，再等待一段时间
                        setTimeout(function() {
                            if ($('#table tbody tr').length > 0) {
                                handleEventGrouping();
                            }
                        }, 500);
                    }
                }, 200);
            });

            $(document).ready(function() {
                // 将selectedProjectId设为全局变量
                window.selectedProjectId = 0;
                
                // 如果控制器传递了table_id且大于0，自动选中对应项目
                if (typeof Config.table_id !== 'undefined' && Config.table_id > 0) {
                    window.selectedProjectId = Config.table_id;
                    
                    // 查找对应的项目名称并更新下拉框显示
                    var $selectedProject = $('.project-list a[data-id="' + Config.table_id + '"]');
                    if ($selectedProject.length > 0) {
                        var projectName = $selectedProject.text();
                        $('.dropdown-toggle').html(
                            '<i class="fa fa-filter"></i> ' + projectName + ' <span class="caret"></span>'
                        );
                    }
                }

                // 检查正式排课记录函数
                function checkFormalSchedule(projectId) {
                    if (projectId == 0) {
                        // 没有选择项目时，隐藏所有项目相关的操作按钮
                        $('.btn-confirm-schedule').hide();
                        $('.btn-cancel-schedule').hide();
                        $('.btn-redo').hide();
                        $('.btn-clear-schedule').hide();
                        return;
                    }

                    Fast.api.ajax({
                        url: 'coursetable/autoplan/checkFormalSchedule',
                        data: {table_id: projectId}
                    }, function(data, ret) {
                        if (data.has_formal) {
                            // 已有正式排课记录，隐藏正式排课按钮，显示取消排课按钮
                            $('.btn-confirm-schedule').hide();
                            $('.btn-cancel-schedule').show();

                            // 隐藏重排和清除项目排期按钮
                            $('.btn-redo').hide();
                            $('.btn-clear-schedule').hide();
                        } else {
                            // 没有正式排课记录，显示正式排课按钮，隐藏取消排课按钮
                            $('.btn-confirm-schedule').show().removeClass('btn-warning').addClass('btn-success');
                            $('.btn-confirm-schedule').find('i').removeClass('fa-exclamation-triangle').addClass('fa-check');
                            $('.btn-confirm-schedule').attr('title', '正式排课');
                            $('.btn-cancel-schedule').hide();

                            // 显示重排和清除项目排期按钮
                            $('.btn-redo').show();
                            $('.btn-clear-schedule').show();
                        }
                    });
                }

                // 页面加载时初始化按钮状态 - 调用checkFormalSchedule来正确设置按钮状态
                checkFormalSchedule(window.selectedProjectId);

                // 选项卡切换事件
                $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
                    var target = $(e.target).attr("href");
                    if (target === '#course-events') {
                        // 切换到课程事件表时，刷新表格
                        if (typeof table !== 'undefined') {
                            setTimeout(function() {
                                table.bootstrapTable('resetView');
                            }, 100);
                        }
                    } else if (target === '#schedule-table') {
                        // 切换到排课表时，可以在这里加载排课表数据
                        loadScheduleView();
                    }
                });
                
                // 项目选择下拉框事件
                $('.project-list').on('click', 'a', function(e) {
                    e.preventDefault();
                    window.selectedProjectId = $(this).data('id');
                    var projectName = $(this).text();
                    
                    // 更新下拉框显示文本
                    $(this).closest('.dropdown').find('.dropdown-toggle').html(
                        '<i class="fa fa-filter"></i> ' + projectName + ' <span class="caret"></span>'
                    );
                    
                    // 刷新表格数据
                    if (typeof table !== 'undefined') {
                        table.bootstrapTable('refresh');
                    }
                    
                    // 检查是否已有正式排课记录
                    checkFormalSchedule(window.selectedProjectId);
                    
                    // 如果当前在排课表选项卡，也刷新排课表
                    if ($('#schedule-table').hasClass('active')) {
                        loadScheduleView();
                    }
                });
                
                // 清空项目排期按钮事件
                $('.btn-clear-schedule').on('click', function() {
                    if (window.selectedProjectId == 0) {
                        Toastr.error('请先选择一个项目');
                        return;
                    }
                    // 检查是否已有正式排课记录
                    Fast.api.ajax({
                        url: 'coursetable/autoplan/checkFormalSchedule',
                        data: {table_id: window.selectedProjectId}
                    }, function(data, ret) {
                        if (data.has_formal) {
                            Layer.alert('该项目已有正式排课记录，不能清空排期！请先取消正式排课后再进行清空操作。', {
                                icon: 2,
                                title: '警告'
                            });
                            return false;
                        } else {
                            // 没有正式排课记录，可以继续清空
                            Layer.confirm('确定要清空该项目的排期数据吗？此操作不可恢复！', {
                                icon: 3,
                                title: '警告'
                            }, function(index) {
                                Fast.api.ajax({
                                    url: 'coursetable/autoplan/clear',
                                    data: {table_id: window.selectedProjectId}
                                }, function(data, ret) {
                                    Toastr.success('清空成功');
                                    table.bootstrapTable('refresh');
                                    // 刷新排课表视图
                                    if ($('#schedule-table').hasClass('active')) {
                                        loadScheduleView();
                                    }
                                    Layer.close(index);
                                });
                            });
                        }
                    }, function(data, ret) {
                        debugger;
                        Toastr.error(ret.msg || '检查正式排课记录失败');
                    });
                });
                
                // 正式排课按钮事件
                $('.btn-confirm-schedule').on('click', function() {
                    if (window.selectedProjectId == 0) {
                        Toastr.error('请先选择一个项目');
                        return;
                    }
                    
                    // 使用密码验证对话框
                    showSchedulePasswordDialog(function(password) {
                        Fast.api.ajax({
                            url: 'coursetable/autoplan/confirmSchedule',
                            data: {
                                table_id: window.selectedProjectId,
                                password: password
                            }
                        }, function(data, ret) {
                            $('#schedulePasswordModal').modal('hide');
                            Toastr.success('正式排课成功');
                            table.bootstrapTable('refresh');
                            // 刷新排课表视图
                            if ($('#schedule-table').hasClass('active')) {
                                loadScheduleView();
                            }
                            // 更新按钮状态
                            checkFormalSchedule(window.selectedProjectId);
                        }, function(data, ret) {
                            $('#schedulePasswordModal').modal('hide');
                            Toastr.error(ret.msg || '正式排课失败');
                        });
                    });
                });

                // 取消正式排课按钮事件
                $('.btn-cancel-schedule').on('click', function() {
                    if (window.selectedProjectId == 0) {
                        Toastr.error('请先选择一个项目');
                        return;
                    }

                    // 显示密码验证对话框
                    showCancelPasswordDialog(function(password) {
                        Fast.api.ajax({
                            url: 'coursetable/autoplan/cancelSchedule',
                            data: {
                                table_id: window.selectedProjectId,
                                password: password
                            }
                        }, function(data, ret) {
                            $('#schedulePasswordModal').modal('hide');
                            Toastr.success(ret.msg || '取消正式排课成功');
                            table.bootstrapTable('refresh');
                            // 刷新排课表视图
                            if ($('#schedule-table').hasClass('active')) {
                                loadScheduleView();
                            }
                            // 更新按钮状态
                            checkFormalSchedule(window.selectedProjectId);
                        }, function(data, ret) {
                            $('#schedulePasswordModal').modal('hide');
                            Toastr.error(ret.msg || '取消正式排课失败');
                        });
                    });
                });


                
                // 加载排课表视图函数
                function loadScheduleView() {
                    // if (window.selectedProjectId == 0) {
                    //     $('#message').html('<div class="alert alert-warning"><i class="fa fa-warning"></i> 请先选择一个项目查看排课表</div>');
                    //     return;
                    // }
                    
                    // $('#message').html('<div class="text-center"><i class="fa fa-spinner fa-spin"></i> 正在加载排课表...</div>');
                    
                    // // 这里可以添加加载排课表的逻辑
                    // // 例如：通过AJAX获取排课数据并渲染成表格或日历视图
                    // setTimeout(function() {
                    //     $('#message').html('<div class="alert alert-success"><i class="fa fa-calendar"></i> 排课表视图将在这里显示（项目ID: ' + window.selectedProjectId + '）</div>');
                    // }, 1000);
                }
            });

            $(document).ready(function() {
                // 检查URL参数并更新guideContent
                function updateGuideContentByUrlParam() {
                    var urlParams = new URLSearchParams(window.location.search);
                    var infoStep = urlParams.get('infostep');

                    if (infoStep === '5') {
                        // 更新步骤信息为第5步
                        $('.current-step-info h5').text('第5步：在课程表管理》课程表列表模块》排课里编辑课程事件信息');
                        $('.current-step-info p').text('查询课程事件生成的上课状态信息');

                        // 更新进度条为91.67%完成，步骤11/12
                        $('.progress-bar').css('width', '91.67%'); // 11/12 = 91.67%
                        $('#rait').text('91.67% 完成');
                        $('#step').text('步骤 11/12');

                        // 更新步骤项
                        $('.step-item .step-number').text('5');
                        $('.step-item strong').text('编辑课程事件信息');
                        $('.step-item p').text('查询课程事件生成的上课状态信息');
                        $('.step-item button').text('如果编辑课程事件信息完成，点击到下一步，第6步哦.');
                        $('.step-item button').attr('onclick', "window.top.location.href='/applyform/apply?ref=addtabs&infostep=6'");
                    }else if (infoStep === '9') {
                        // 更新步骤信息为第5步
                        $('.current-step-info h5').text('第4步：课程事件管理');
                        $('.current-step-info p').text('查询课程事件生成的上课状态信息');

                        // 更新进度条为91.67%完成，步骤11/12
                        $('.progress-bar').css('width', '97.67%'); // 11/12 = 91.67%
                        $('#rait').text('97.67% 完成');
                        $('#step').text('步骤 11/12');

                        // 更新步骤项
                        $('.step-item .step-number').text('4.2');
                        $('.step-item strong').text('编辑课程事件信息');
                        $('.step-item p').text('查询课程事件生成的上课状态信息');
                        $('.step-item button').text('如果编辑课程事件信息完成，点击到下一步,也是最后一步第5步【项目信息统计】');
                        $('.step-item button').attr('onclick', "window.top.location.href='/applyform/apply?ref=addtabs&infostep=10'");
                    }
                }

                // 页面加载时执行
                updateGuideContentByUrlParam();

            });
            
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/index.js?';
            document.head.appendChild(script);
            // 移除重复的事件绑定，避免双重绑定导致添加按钮打开两个窗口
            // Table.api.bindevent(table); // 已注释，避免重复绑定

            // Add sticky header functionality
            $(window).scroll(function() {
                var table = $('#table');
                var thead = table.find('thead');
                var tableOffset = table.offset().top;
                var scrollTop = $(window).scrollTop();
                
                if (scrollTop > tableOffset) {
                    thead.css({
                        'position': 'sticky',
                        'top': '0',
                        'z-index': '1000',
                        'background-color': '#fff'
                    });
                    
                    // Match column widths - 但保持ID、项目名称、班名列宽度不变
                    var firstRowCells = table.find('tbody tr:first td');
                    thead.find('th').each(function(index) {
                        // 跳过ID(索引1)、项目名称(索引2)、班名(索引3)列，不改变其宽度
                        if (index === 1 || index === 2 || index === 3) {
                            return; // 跳过这些列，保持原有宽度
                        }
                        $(this).width(firstRowCells.eq(index).width());
                    });
                } else {
                    thead.css({
                        'position': '',
                        'top': '',
                        'z-index': '',
                        'background-color': ''
                    });
                }
            });
            
            // Trigger scroll event on load to set initial state
            $(window).trigger('scroll');
        },
        add: function () {
            if (typeof Vue === 'undefined') {
                return;
            }
            Vue.component('manager-box', ManagerBox);
            Vue.component('teacher-box', TeacherBox);
            new Vue({
                el: '#app',
                components: {
                    // 局布注册组件
                    //'manager-box': ManagerBox,
                    //'teacher-box': TeacherBox
                },
                data: {
                    leftOptions: Config.leftOptions,
                    rightOptions: Config.rightOptions
                }
            });
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js';
            document.head.appendChild(script);
            Controller.api.bindevent();
        },
        edit: function () {
            if (typeof Vue === 'undefined') {
                return;
            }
            Vue.component('manager-box', ManagerBox);
            Vue.component('teacher-box', TeacherBox);
            new Vue({
                el: '#app',
                components: {
                    // 局布注册组件
                    //'manager-box': ManagerBox,
                    //'teacher-box': TeacherBox
                },
                data: {
                    leftOptions: Config.leftOptions,
                    rightOptions: Config.rightOptions
                }
            });
            var row = JSON.parse($('#row').val());
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js';
            document.head.appendChild(script);
            Controller.api.bindevent();
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            },
            formatter: {//渲染的方法
                url: function (value, row, index) {
                    return '<div class="input-group input-group-sm" style="width:250px;"><input type="text" class="form-control input-sm" value="' + value + '"><span class="input-group-btn input-group-sm"><a href="' + value + '" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a></span></div>';
                },
                ip: function (value, row, index) {
                    return '<a class="btn btn-xs btn-ip bg-success"><i class="fa fa-map-marker"></i> ' + value + '</a>';
                },
                status: function (value, row, index) {
                    //添加上btn-change可以自定义请求的URL进行数据处理
                    return '<a class="btn-change text-success" data-url="coursetable/autoplan/status" data-confirm="确认切换状态？" data-id="' + row.id + '"><i class="fa ' + (row.status == 0 ||row.status == null ? 'fa-toggle-on fa-flip-horizontal text-gray' : 'fa-toggle-on') + ' fa-2x"></i></a>';
                },
                changeStatus: function (value, row, index) {
                    //添加上btn-change可以自定义请求的URL进行数据处理
                    return '<a class="btn-change text-success" data-url="coursetable/autoplan/coursetable/autoplan/changeStatus" data-confirm="确认切换状态？" data-id="' + row.id + '"><i class="fa ' + (row.status === 0 ? 'fa-toggle-on fa-flip-horizontal text-gray' : 'fa-toggle-on') + ' fa-2x"></i></a>';
                },
            },
            events: {//绑定事件的方法
                ip: {
                    //格式为：方法名+空格+DOM元素
                    'click .btn-ip': function (e, value, row, index) {
                        e.stopPropagation();
                        var container = $("#table").data("bootstrap.table").$container;
                        var options = $("#table").bootstrapTable('getOptions');
                        //这里我们手动将数据填充到表单然后提交
                        $("form.form-commonsearch [name='ip']", container).val(value);
                        $("form.form-commonsearch", container).trigger('submit');
                        Toastr.info("执行了自定义搜索操作");
                    }
                },
            }
        }
    };

    return Controller;
});

// 添加处理过期行的函数
function handleEventGrouping() {
    var currentDate = new Date();
    window.expiredRecords = [];
    window.normalRecords = [];
    
    // 获取当前日期字符串
    var today = new Date();
    var currentDateStr = today.getFullYear() + '-' + 
                        String(today.getMonth() + 1).padStart(2, '0') + '-' + 
                        String(today.getDate()).padStart(2, '0');
    var totalRows = $('#table tbody tr').length;
    var processedRows = 0;
    var expiredCount = 0;
    var normalCount = 0;
    var emptyDateCount = 0;
    var invalidDateCount = 0;
    // 遍历表格行，分组过期和未过期的事件
    $('#table tbody tr').each(function(index) {
        var $row = $(this);
        processedRows++;
        
        // 检查行的基本信息
        var rowId = $row.find('td').eq(1).text().trim(); // ID列
        var dateCell = $row.find('td').eq(8); // 日期列
        var dateText = dateCell.text().trim();
        
        if (dateText && dateText !== '') {
            // 从dateText提取前16个字符的日期时间字符串（格式如"2025-07-10 15:15"）
            var dateTimeStr = dateText.substring(0, 16);
            
            // 验证日期格式
            var dateRegex = /^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}$/;
            if (!dateRegex.test(dateTimeStr)) {
                 invalidDateCount++;
                window.normalRecords.push($row.clone(true));
                $row.addClass('normal-original');
                normalCount++;
                return;
            }
            
            // 使用时间戳比较（精确到分钟）
            var rowDateTime = new Date(dateTimeStr).getTime();
            var currentDateTime = new Date().getTime();
            if (rowDateTime < currentDateTime) {
                
                window.expiredRecords.push($row.clone(true)); // 克隆行数据
                $row.addClass('expired-original').hide(); // 隐藏原始过期行
                expiredCount++;
            } else {
                window.normalRecords.push($row.clone(true)); // 克隆行数据
                $row.addClass('normal-original');
                normalCount++;
            }
        } else {
            window.normalRecords.push($row.clone(true));
            $row.addClass('normal-original');
            emptyDateCount++;
            normalCount++;
        }
    });
    
    // 对分组后的数据按日期排序
    // 排序函数：提取日期并比较
    function sortByDate(a, b) {
        var dateA = extractDateFromRow(a);
        var dateB = extractDateFromRow(b);

        // 如果日期相同，按时间排序
        if (dateA === dateB) {
            var timeA = extractTimeFromRow(a);
            var timeB = extractTimeFromRow(b);
            return timeA.localeCompare(timeB);
        }

        return dateA.localeCompare(dateB);
    }

    // 提取行中的日期
    function extractDateFromRow($row) {
        var dateText = $row.find('td').eq(7).text().trim(); // 日期列
        if (dateText && dateText !== '') {
            var dateParts = dateText.split(' ');
            return dateParts[0] || ''; // 返回日期部分，如"2025-07-10"
        }
        return '9999-12-31'; // 空日期排在最后
    }

    // 提取行中的时间
    function extractTimeFromRow($row) {
        var dateText = $row.find('td').eq(7).text().trim(); // 日期列
        if (dateText && dateText !== '') {
            var dateParts = dateText.split(' ');
            return dateParts[1] || ''; // 返回时间部分，如"15:15-16:45"
        }
        return '';
    }

    // 对未过期事件按日期先后顺序排序（最近的在前）
    window.normalRecords.sort(sortByDate);
    // 对已过期事件按日期先后顺序排序（最近过期的在前）
    window.expiredRecords.sort(function(a, b) {
        var dateA = extractDateFromRow(a);
        var dateB = extractDateFromRow(b);

        // 如果日期相同，按时间排序
        if (dateA === dateB) {
            var timeA = extractTimeFromRow(a);
            var timeB = extractTimeFromRow(b);
            return timeB.localeCompare(timeA); // 已过期事件：时间倒序（最晚的在前）
        }

        return dateB.localeCompare(dateA); // 已过期事件：日期倒序（最近过期的在前）
    });
    // 输出统计信息
    // 检查数据完整性
    if (totalRows !== (window.expiredRecords.length + window.normalRecords.length)) {
        console.error('差异:', totalRows - (window.expiredRecords.length + window.normalRecords.length));
    } else {
    }
    
    // 重置分页状态
    window.currentPage = {
        expired: 1,
        normal: 1
    };
    
    // 创建切换控制器
    createEventToggleController();
}

// 创建事件切换控制器
function createEventToggleController() {
    // 移除现有的控制器
    $('#event-toggle-controller').remove();
    
    // 创建切换按钮容器和分页控制器
    var controllerHtml = '<div id="event-toggle-controller" style="margin-bottom: 15px; padding: 10px; background-color: #f8f9fa; border-radius: 5px; border: 1px solid #dee2e6;">' +
        '<div class="row">' +
            '<div class="col-md-6">' +
                '<div class="btn-group" role="group">' +
                    '<button type="button" class="btn btn-primary btn-sm toggle-normal active" data-type="normal">' +
                        '<i class="fa fa-calendar-check-o"></i> 未过期事件 (' + window.normalRecords.length + ')' +
                    '</button>' +
                    '<button type="button" class="btn btn-outline-secondary btn-sm toggle-expired" data-type="expired">' +
                        '<i class="fa fa-clock-o"></i> 已过期事件 (' + window.expiredRecords.length + ')' +
                    '</button>' +
                '</div>' +
            '</div>' +
            '<div class="col-md-6 text-right">' +
                '<div id="pagination-info" class="d-inline-block mr-3"></div>' +
                '<div id="pagination-controls" class="d-inline-block"></div>' +
            '</div>' +
        '</div>' +
    '</div>';
    
    // 将控制器插入到表格前面
    $('#table').before(controllerHtml);
    
    // 创建底部分页控制器
    createBottomPaginationController();
    
    // 默认显示未过期事件
    window.currentView = 'normal';
    showEventsByType('normal');
    
    // 绑定切换事件
    $('.toggle-normal, .toggle-expired').off('click').on('click', function() {
        var type = $(this).data('type');
        
        // 更新按钮状态
        $('.toggle-normal, .toggle-expired').removeClass('btn-primary active').addClass('btn-outline-secondary');
        $(this).removeClass('btn-outline-secondary').addClass('btn-primary active');
        
        // 切换显示内容
        window.currentView = type;
        showEventsByType(type);
    });
}

// 创建底部分页控制器
function createBottomPaginationController() {
    // 移除现有的底部控制器
    $('#bottom-pagination-controller').remove();
    
    // 创建底部分页控制器HTML
    var bottomControllerHtml = '<div id="bottom-pagination-controller" style="margin-top: 15px; padding: 15px; background-color: #f8f9fa; border-radius: 5px; border: 1px solid #dee2e6; border-top: 2px solid #007bff;">' +
        '<div class="row align-items-center">' +
            '<div class="col-md-6">' +
                '<div id="bottom-pagination-info" class="text-muted"></div>' +
            '</div>' +
            '<div class="col-md-6">' +
                '<div id="bottom-pagination-controls" class="text-right"></div>' +
            '</div>' +
        '</div>' +
    '</div>';
    
    // 将底部控制器插入到表格后面
    $('#table').after(bottomControllerHtml);
}

// 根据类型显示事件（带分页）
function showEventsByType(type) {
    // 清空当前表格内容
    $('#table tbody').empty();
    
    var allRows = type === 'expired' ? window.expiredRecords : window.normalRecords;
    var currentPage = window.currentPage[type];
    var pageSize = window.pageSize;
    
    if (allRows.length === 0) {
        // 如果没有数据，显示提示信息
        var emptyMessage = type === 'expired' ? '暂无已过期的课程事件' : '暂无未过期的课程事件';
        $('#table tbody').append(
            '<tr><td colspan="100%" class="text-center text-muted" style="padding: 40px;">' +
                '<i class="fa fa-' + (type === 'expired' ? 'clock-o' : 'calendar-check-o') + ' fa-2x"></i><br>' +
                '<div class="mt-2">' + emptyMessage + '</div>' +
            '</td></tr>'
        );
        // 隐藏分页控制器
        $('#pagination-info').empty();
        $('#pagination-controls').empty();
        $('#bottom-pagination-info').empty();
        $('#bottom-pagination-controls').empty();
    } else {
        // 计算分页参数
        var totalPages = Math.ceil(allRows.length / pageSize);
        var startIndex = (currentPage - 1) * pageSize;
        var endIndex = Math.min(startIndex + pageSize, allRows.length);
        var rowsToShow = allRows.slice(startIndex, endIndex);
        
        // 获取当前日期字符串
        var today = new Date();
        var currentDateStr = today.getFullYear() + '-' +
                            String(today.getMonth() + 1).padStart(2, '0') + '-' +
                            String(today.getDate()).padStart(2, '0');

        // 添加对应类型的行
        rowsToShow.forEach(function($row) {
            var $newRow = $row.clone(true);

            // 获取行中的日期信息
            var dateCell = $newRow.find('td').eq(7); // 日期列
            var dateText = dateCell.text().trim();
            var dateOnly = '';

            if (dateText && dateText !== '') {
                var dateParts = dateText.split(' ');
                dateOnly = dateParts[0]; // 提取日期部分，如"2025-07-10"
            }

            // 判断是否为当天的课程
            if (dateOnly === currentDateStr) {
                // 当天的课程：淡绿色背景，红色加粗文字
                $newRow.addClass('today-row');
            } else if (type === 'expired') {
                // 已过期的课程
                $newRow.addClass('expired-row');
            }
            // 未过期且非当天的课程保持默认样式

            $('#table tbody').append($newRow);
        });
        
        // 更新分页信息
        updatePaginationInfo(type, currentPage, totalPages, startIndex + 1, endIndex, allRows.length);
        
        // 更新分页控制器
        updatePaginationControls(type, currentPage, totalPages);
    }
    
    // 添加样式
    if (!$('#event-grouping-styles').length) {
        $('<style id="event-grouping-styles">' +
            '.expired-row { background-color: #fff5f5 !important; }' +
            '.expired-row td { color: #721c24; }' +
            '.today-row { background-color: #59b56e !important; }' +
            '.today-row td { color: #ffffff !important; }' +
            '.today-row td .label-success { background-color: #28a745 !important; }' +
            '.toggle-normal.active, .toggle-expired.active { box-shadow: 0 2px 4px rgba(0,123,255,0.3); }' +
            '#event-toggle-controller .btn { transition: all 0.2s ease; }' +
            '#event-toggle-controller .btn:hover { transform: translateY(-1px); }' +
            '.pagination-btn { margin: 0 2px; padding: 4px 8px; border: 1px solid #ddd; background: #fff; cursor: pointer; }' +
            '.pagination-btn:hover { background: #f5f5f5; }' +
            '.pagination-btn.active { background: #007bff; color: #fff; border-color: #007bff; }' +
            '.pagination-btn:disabled { background: #f8f9fa; color: #6c757d; cursor: not-allowed; }' +
        '</style>').appendTo('head');
    }
}

// 更新分页信息
function updatePaginationInfo(type, currentPage, totalPages, startIndex, endIndex, totalRecords) {
    var typeText = type === 'expired' ? '已过期' : '未过期';
    var infoText = '显示 ' + typeText + ' 第 ' + startIndex + '-' + endIndex + ' 条，共 ' + totalRecords + ' 条记录（第 ' + currentPage + '/' + totalPages + ' 页）';
    
    // 同时更新顶部和底部的分页信息
    $('#pagination-info').html('<small class="text-muted">' + infoText + '</small>');
    $('#bottom-pagination-info').html('<div class="d-flex align-items-center">' +
        '<i class="fa fa-info-circle text-primary mr-2"></i>' +
        '<span>' + infoText + '</span>' +
    '</div>');
}

// 更新分页控制器
function updatePaginationControls(type, currentPage, totalPages) {
    var controlsHtml = '';
    
    if (totalPages > 1) {
        // 上一页按钮
        controlsHtml += '<button class="pagination-btn" data-page="' + (currentPage - 1) + '" data-type="' + type + '"' + 
                       (currentPage <= 1 ? ' disabled' : '') + '>上一页</button>';
        
        // 页码按钮
        var startPage = Math.max(1, currentPage - 2);
        var endPage = Math.min(totalPages, currentPage + 2);
        
        if (startPage > 1) {
            controlsHtml += '<button class="pagination-btn" data-page="1" data-type="' + type + '">1</button>';
            if (startPage > 2) {
                controlsHtml += '<span class="pagination-ellipsis">...</span>';
            }
        }
        
        for (var i = startPage; i <= endPage; i++) {
            controlsHtml += '<button class="pagination-btn' + (i === currentPage ? ' active' : '') + '" data-page="' + i + '" data-type="' + type + '">' + i + '</button>';
        }
        
        if (endPage < totalPages) {
            if (endPage < totalPages - 1) {
                controlsHtml += '<span class="pagination-ellipsis">...</span>';
            }
            controlsHtml += '<button class="pagination-btn" data-page="' + totalPages + '" data-type="' + type + '">' + totalPages + '</button>';
        }
        
        // 下一页按钮
        controlsHtml += '<button class="pagination-btn" data-page="' + (currentPage + 1) + '" data-type="' + type + '"' + 
                       (currentPage >= totalPages ? ' disabled' : '') + '>下一页</button>';
    }
    
    // 同时更新顶部和底部的分页控制器
    $('#pagination-controls').html(controlsHtml);
    $('#bottom-pagination-controls').html(controlsHtml);
    
    // 绑定分页按钮事件（顶部和底部）
    $('.pagination-btn').off('click').on('click', function() {
        if ($(this).prop('disabled')) return;
        
        var page = parseInt($(this).data('page'));
        var pageType = $(this).data('type');
        
        if (page && pageType) {
            window.currentPage[pageType] = page;
            showEventsByType(pageType);
        }
    });
}
